Jak zavrit z programu modalni form, ktery je aktivni?
Otázka od: Ing. Marta Perglerová
15. 9. 2002 15:12
Mam nemodalni form. Z nej oteviram modalni form, ktery ma v OnActivate
nejaky kod, ktery
sve vysledky zobrazuje na ten modalni formular. Ja chci, aby po skonceni
tohoto kodu se tento modalni
form sam uzavrel a predal rizeni zpet tomu formu, ze ktereho byl vyvolan.
Jak to udelat?
Diky za navod.
Ing. Marta Perglerova
Odpovedá: Obermaier Petr Ing.
15. 9. 2002 16:47
> Od: Ing. Marta Perglerová [SMTP:marta.perglerova@seznam.cz]
> Mam nemodalni form. Z nej oteviram modalni form, ktery ma v OnActivate
> nejaky kod, ktery
> sve vysledky zobrazuje na ten modalni formular. Ja chci, aby po skonceni
> tohoto kodu se tento modalni
> form sam uzavrel a predal rizeni zpet tomu formu, ze ktereho byl vyvolan.
> Jak to udelat?
>
Nevim, jestli te spravne chapu, ale nestaci dat na konec toho nejakeho kodu
Close; ?
Ober
Odpovedá: Petr Vones
15. 9. 2002 15:51
From: "Obermaier Petr Ing." <Obermaier@mail.sdas.cz>
> Nevim, jestli te spravne chapu, ale nestaci dat na konec toho nejakeho kodu
> Close; ?
Ne v tomto pripade. Problem je chybne pouziti udalosti TForm.OnActivate ke
spusteni dane akce. Po skonceni teto udalosti je totiz do ModalResult
prirazena nula, takze jakykoli pokus o zavreni modalniho dialogu v teto
udalosti selze. Spravne reseni je pouzit uzivatelskou zpravu, tuto zaslat
asynchronne po zobrazeni dialogu a v obsluze te udalosti spustit dano akci:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
UM_AKCE = WM_USER + $1000;
type
TForm2 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure FormShow(Sender: TObject);
private
procedure Akce;
procedure UMAkce(var Msg: TMessage); message UM_AKCE;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
{ TForm2 }
procedure TForm2.Akce;
var
I: Integer;
begin
for I := 1 to 1000 do
begin
Label1.Caption := IntToStr(I);
Label1.Update;
end;
Close;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
PostMessage(Handle, UM_AKCE, 0, 0);
end;
procedure TForm2.UMAkce(var Msg: TMessage);
begin
Update;
Akce;
end;
end.
Petr Vones